﻿using System;
using System.Collections.Generic;
using System.Text;
using Csla;
using System.Data;
using Ent.AccesoDatos;

namespace Ent.Inscripcion.Core
{
    [Serializable]
    public class VerificarPagoFacturaCmd : CommandBase<VerificarPagoFacturaCmd>
    {
        string _numeroFactura;
        string _identificacion;
        string _item;
        string _fecha;

        #region Factory Methods

        public static VerificarPagoFacturaCmd Execute(VerificaPagoCriterio criterio)
        {

            var cmd = new VerificarPagoFacturaCmd(criterio);
            cmd.BeforeServer();
            cmd = DataPortal.Execute<VerificarPagoFacturaCmd>(cmd);
            cmd.AfterServer();
            return cmd;
        }

        public VerificarPagoFacturaCmd(VerificaPagoCriterio criterio)
        {
            _numeroFactura =criterio.NumeroFactura;
            _identificacion = criterio.Identificacion;
            _fecha = criterio.Fecha;
            _item = criterio.Item;
        }

        #endregion

        #region Client-side Code

        // TODO: add your own fields and properties
        bool _result;

        public bool Result
        {
            get { return _result; }
        }

        private void BeforeServer()
        {
            // TODO: implement code to run on client
            // before server is called
        }

        private void AfterServer()
        {
            // TODO: implement code to run on client
            // after server is called
        }

        #endregion

        #region Server-side Code

        protected override void DataPortal_Execute()
        {
            var accesoDatos = new DriveDataBase(TypeDataBase.Mysql);
            var parametros = new List<Parametro>
                                 {
                                     new Parametro("NumeroFactura", _numeroFactura),
                                     new Parametro("Item", _item),
                                     new Parametro("Identificacion", _identificacion),
                                     new Parametro("Fecha", _fecha)
                                 };
            var datos = accesoDatos.EjecutarScalar("VerificarNumeroFactura", parametros);
            int resultado;
            int.TryParse(datos.ToString(), out resultado);
            _result = resultado == 0;
        }

        #endregion
    }

    [Serializable]
    public class VerificaPagoCriterio : BusinessBase<VerificaPagoCriterio>
    {
        #region Business Methods

        private static PropertyInfo<string> NumeroFacturaProperty = RegisterProperty<string>(o => o.NumeroFactura, "NumeroFactura");
        public string NumeroFactura
        {
            get { return GetProperty(NumeroFacturaProperty); }
            set { SetProperty(NumeroFacturaProperty, value); }
        }

        private static PropertyInfo<string> ItemProperty = RegisterProperty<string>(o => o.Item, "Item");
        public string Item
        {
            get { return GetProperty(ItemProperty); }
            set { SetProperty(ItemProperty, value); }
        }

        private static PropertyInfo<string> FechaProperty = RegisterProperty<string>(o => o.Fecha, "Fecha");
        public string Fecha
        {
            get { return GetProperty(FechaProperty); }
            set { SetProperty(FechaProperty, value); }
        }

        private static PropertyInfo<string> IdentificacionProperty = RegisterProperty<string>(o => o.Identificacion, "Identificacion");
        public string Identificacion
        {
            get { return GetProperty(IdentificacionProperty); }
            set { SetProperty(IdentificacionProperty, value); }
        }
        #endregion



        #region Factory Methods

        public static VerificaPagoCriterio NewVerificaPagoCriterio()
        {
            return DataPortal.Create<VerificaPagoCriterio>();
        }



        private VerificaPagoCriterio()
        { /* Require use of factory methods */ }

        #endregion


    }
}
